package com.oig.sys.msg.dao;

import com.oig.sys.msg.entity.TbNoticeMsg;
import com.oig.sys.msg.vo.NoticeMsgVo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;

/**
@author wuxl
*/
public interface ITbNoticeMsgDao extends JpaRepository<TbNoticeMsg, Integer> {

	@Query("from TbNoticeMsg n where n.id=:id")
	TbNoticeMsg getNoticeMsgById(@Param("id") Integer id);


    @Query("select count(n) from TbNoticeMsg n inner join TbNoticeMsgReceiver r on r.msgId = n.id" +
            " where r.receiverId=:userId and r.msgStatus='01' and r.delFlag='0' ")
    Integer findUnReadSizeByUserId(@Param("userId") Integer userId);


	@Query("select new com.oig.sys.msg.vo.NoticeMsgVo(n.id, n.title, n.content, n.msgSource,n.msgType, n.pushChannelId, n.pushChannelName, " +
			" n.receiverType, n.receiverId, n.receiverName," +
			" n.msgStatus, n.pubTime, n.bizId, n.createUserId, n.createUserName, n.createTime, n.lastUpdateId, n.lastUpdateName,n.lastUpdateTime," +
			" n.checkId, n.checkName, n.checkTime, n.checkRemark, n.tenantId,n.tenantName, n.publisherId, n.publisherName, n.publisherTime) " +
			" from TbNoticeMsg n where n.msgStatus='04' and n.sendTimes<3")
	List<NoticeMsgVo> findUnSendMsg();

	@Modifying
	@Query("update TbNoticeMsg r set r.msgStatus='09' where r.id =:id")
	void updateMsgStatusById(@Param("id")Integer id);

	@Modifying
	@Query("update TbNoticeMsg r set r.sendTimes=r.sendTimes+1 where r.id =:id")
	void updateSendTimesById(@Param("id")Integer id);

}
